最小構成でAmazonLinux環境を構築してみた
はじめに
AWSチームのすずきです。
AWSより提供されているLinuxディストーションのAmazon Linux、
Amazon Linux AMIは、できるだけ軽量かつシンプルに設計されており、不必要なアプリケーションやサービスは全く入っていません。 参考:Amazon Linux AMIの提供開始
とされていますが、標準提供のAMIから更にパッケージが絞り込まれた「minimal」のAMIが、AWSより提供されています。
今回、「minimal」のAMIを用いて最小構成のAmazonLinux環境を構築する方法を紹介します。
起動方法
コミュニティAMIとして起動
「minimal」のAmazonLinuxのAMIは、パブリックなコミュニティAMIとして配布されています。
- オペレーティングシステムとして「Amazon Linux」を選択
- AMIの検索フォームに「minimal 2015.03.[0-9]」を指定
- フォームは正規表現が利用可能です。
- 2015年現在、リリース版のAmazonLinuxのAMI名は「年.月.連番」が付与されて管理されています。
- EC2のインスタンスタイプ、今回「t2.micro」を利用したため「HVM」を指定しました。
ストレージ設定
- デフォルトのAmazonLinuxでは、ルートディスクのEBS領域は8GB確保されますが、 「minimal」では、EBS領域は2GBでの起動が可能です。
- 「minimal」のAmazonLinux、起動直後のルートディスク消費は約700MBです。
/dev/xvda1 2029372 706728 1285312 36% /
- EBSの種類、SSDベースの「gp2」とした場合、バーストによりOS起動の高速化などが期待出来ます。 ただし、連続したIO処理やswapが多発する環境で利用した場合、小容量のgp2はクレジットが枯渇しやすく、性能低下のリスクにご注意下さい。 参考:Amazon EBSのGeneral Purpose(SSD)のバーストルールを理解する
-
ルートディスクの残量枯渇は、重篤なシステム障害原因となります。 EBS容量の拡張は可能ですが、長期の連続稼働が想定される環境では余裕をもった設定とする事をお勧めします。
デフォルトとminimalの違い
Amazon Linux 2014.03、2015年6月時点の差分は以下の通りでした。
パッケージ
デフォルトに存在し、minimalでインストールされないRPMパッケージは下記の通りでした。
minimal未導入 |
---|
acl |
acpid |
alsa-lib |
at |
attr |
aws-amitools-ec2 |
aws-apitools-as |
aws-apitools-common |
aws-apitools-ec2 |
aws-apitools-elb |
aws-apitools-mon |
aws-apitools-rds |
aws-cfn-bootstrap |
aws-cli |
bc |
bind-libs |
bind-utils |
cryptsetup |
cryptsetup-libs |
cyrus-sasl-plain |
dbus |
dejavu-fonts-common |
dejavu-sans-fonts |
dejavu-serif-fonts |
device-mapper |
device-mapper-event |
device-mapper-event-libs |
device-mapper-libs |
device-mapper-persistent-data |
diffutils |
dmraid |
dmraid-events |
dump |
ec2-net-utils |
epel-release |
fontconfig |
fontpackages-filesystem |
freetype |
giflib |
gpm-libs |
irqbalance |
java |
javapackages-tools |
jpackage-utils |
kernel |
kernel-tools |
kpartx |
lcms2 |
libICE |
libSM |
libX11 |
libX11-common |
libXau |
libXext |
libXfont |
libXi |
libXrender |
libXtst |
libaio |
libfontenc |
libicu |
libjpeg-turbo |
libpipeline |
libpng |
libpsl |
libxcb |
libxslt |
lsof |
lvm2 |
lvm2-libs |
man-db |
man-pages |
mdadm |
nano |
nc |
ntsysv |
numactl |
openssh-clients |
pam_ccreds |
pam_krb5 |
pam_passwdqc |
parted |
perl |
perl-Carp |
perl-Digest |
perl-Digest-HMAC |
perl-Digest-MD5 |
perl-Digest-SHA |
perl-Encode |
perl-Exporter |
perl-File-Path |
perl-File-Temp |
perl-Filter |
perl-Getopt-Long |
perl-HTTP-Tiny |
perl-PathTools |
perl-Pod-Escapes |
perl-Pod-Perldoc |
perl-Pod-Simple |
perl-Pod-Usage |
perl-Scalar-List-Utils |
perl-Socket |
perl-Storable |
perl-Text-ParseWords |
perl-Time-Local |
perl-constant |
perl-libs |
perl-macros |
perl-parent |
perl-podlators |
perl-threads |
perl-threads-shared |
psacct |
python27-bcdoc |
python27-boto |
python27-botocore |
python27-colorama |
python27-crypto |
python27-daemon |
python27-dateutil |
python27-devel |
python27-docutils |
python27-ecdsa |
python27-imaging |
python27-jmespath |
python27-kitchen |
python27-lockfile |
python27-paramiko |
python27-pip |
python27-ply |
python27-pystache |
python27-rsa |
python27-simplejson |
python27-virtualenv |
rmt |
rng-tools |
rsync |
ruby |
ruby20 |
ruby20-irb |
ruby20-libs |
rubygem20-json |
rubygem20-psy |
rubygem20-rdoc |
rubygems20 |
screen |
sgpio |
tcp_wrappers |
time |
tmpwatch |
traceroute |
ttmkfdir |
tzdata-java |
unzip |
vim-common |
vim-enhanced |
vim-filesystem |
wget |
word |
xorg-x11-fonts-Type1 |
xorg-x11-font-utils |
yum-utils |
zip |
サービス(chkconfig)差分
chkconfigで確認した、常駐サービスの違いは下記の通りでした。
minimal未起動サービス |
---|
acpid |
atd |
blk-availability |
irqbalance |
lvm2-monitor |
mdmonitor |
messagebus |
rngd |
ディスク使用状況(df)
- minimal
ファイルシス 1K-blocks 使用 使用可 使用% マウント位置 /dev/xvda1 2029372 706728 1285312 36% / devtmpfs 502340 56 502284 1% /dev tmpfs 510092 0 510092 0% /dev/shm
- デフォルト
ファイルシス 1K-blocks 使用 使用可 使用% マウント位置 /dev/xvda1 8123812 1144760 6878804 15% / devtmpfs 500896 56 500840 1% /dev tmpfs 510092 0 510092 0% /dev/shm
メモリ、プロセス(top)
- minimal
Tasks: 58 total, 1 running, 57 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1020188k total, 319908k used, 700280k free, 6492k buffers Swap: 0k total, 0k used, 0k free, 265172k cached
- デフォルト
Tasks: 61 total, 1 running, 60 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.8%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1020188k total, 472204k used, 547984k free, 11572k buffers Swap: 0k total, 0k used, 0k free, 405960k cached
パッケージ追加例
- 「minimal」のAmazonLinux、yumレポジトリはAmazonLinuxのデフォルトと共通です。 任意のパッケージを追加インストールする事で、デフォルト環境相当として利用可能です。
sudo yum install aws-cfn-bootstrap aws-cli ec2-net-utils bind-utils traceroute nc wget lsof parted rng-tools tmpwatch bc diffutils time openssh-clients psacct unzip yum-utils zip jq yum clean all
- 追加パッケージ概要
RPMパッケージ名 | 機能 |
---|---|
aws-cfn-bootstrap | CloudFormation ヘルパースクリプト |
aws-cli | AWS CLI |
ec2-net-utils | EC2のENI(NIC)自動設定 |
bind-utils | DNS確認(dig, nslookup) |
traceroute | NWルーティング確認 |
nc | Netcat(NW疎通確認) |
wget | HTTPダウンローダ |
lsof | ファイル利用中プロセス確認 |
parted | parted(fdisk後継、パーティション設定ツール) |
rng-tools | 乱数発生用 |
rsync | rsync、ファイル同期 |
tmpwatch | tmpの自動消去 |
bc | GNU's bc |
diffutils | A GNU collection of diff utilities |
time | GNU Time、コマンド実行時間の計測 |
openssh-clients | SSHクライアント |
psacct | コマンド履歴取得 |
unzip | ZIPファイル解凍 |
wget | HTTPダウンローダ |
yum-utils | yum支援ツール |
zip | ZIP |
jq | JSON処理 |
まとめ
Amazon Linux環境を「minimal」のAMIを利用し、最小構成の状態から構築を行う事で、 不要なパッケージの導入を回避でき、リソースの節約が可能となります。 また、パッチ適用漏れに起因するセキュリティリスクの軽減や、 新旧バージョンの開発環境が混在する事による不具合回避などの副次効果も期待出来ます。
ただし、AmazonLinux上で稼働させるアプリケーションだけでなく、 構築や監視運用などに利用するツールがAmazonLinuxデフォルトのパッケージに依存している場合もありますので、 十分な事前検証の上、ご利用頂く事をお勧めします。